#include "Config.h"
#include "string"
#include <string>
#include <string.h>

Config::Config(std::string file)
: m_strConfigFile(file)
, m_strHost("127.0.0.1")
, m_iPort(4111)
{
  ifstream entrada(m_strConfigFile.c_str());

  if (!entrada.good())
  {
    std::cerr << "Error al abrir archivo " << m_strConfigFile << std::endl;
    exit(1);
  }

  obtenerDatos(entrada);

}


Config::~Config()
{

}

void Config::obtenerDatos(ifstream& entrada)
{

  char line[1024];
  memset(line, 0, 1024);
  bool bPort = false;
  bool bDURACION = false;
  bool bINMUNIDAD = false;

  while ( entrada.getline(line, 1024, '\n') != NULL)
  {
    char* p=line;

    while (*p == ' ') p++;

    if (*p == '#') continue;

    string temp((const char*)p);
    size_t found = temp.find("=");

    if (found != string::npos)
    {
       if (temp.substr(0, found) == "DURACION")
       {
    	 m_duracion = atoi(temp.substr(found+1, temp.size()).c_str());
         bDURACION = true;
       }
       if (temp.substr(0, found) == "INMUNIDAD")
       {
         m_inmunida = atoi(temp.substr(found+1, temp.size()).c_str());
         bINMUNIDAD = true;
       }

       if (temp.substr(0, found) == "PUERTO")
       {
         m_iPort = atoi(temp.substr(found+1, temp.size()).c_str());
         bPort = true;
       }

    }
  }

  cout << "-----------------------------------------------------------------------------" << endl
  	   << "Datos de configuracion:                                                    " << endl
       << " Puerto   : " << m_iPort   << " \tLeido desde archivo: " << (bPort ? "SI":"NO") << endl
       << " Inmunidad: " << m_inmunida   << " \t\tLeido desde archivo: " << (bINMUNIDAD? "SI":"NO") << endl
       << " Duracion : " << m_duracion   << " \t\tLeido desde archivo: " << (bDURACION ? "SI":"NO") << endl
       << "-----------------------------------------------------------------------------" << endl;

}

std::string Config::obtenerHost()
{
  return m_strHost;
}

int Config::obtenerPuerto()
{
  return m_iPort;
}

map<int,int> Config::obtenerControles()
{
  return m_mControles;
}

int Config::getDuracion(){
	return this->m_duracion;
}

int Config::getInmunidad(){
	return this->m_inmunida;
}


